/*
* created by Administrator on 2018/12/17
* 好的代码像粥一样,是得用时间和精力熬的。
*/
/* eslint-disable*/
// 防抖函数
export const Debounce = (fn,wait) => {
  // 定义一个定时器的变量【容器】
  var timer = null;
  // 此函数的返回值是一个函数
  return function () {
    // 定义当前this指向
    var context = this;
    //定义当前函数的参数
    var args = arguments;
    // 如果定时器当前已经被赋值 则清空次定时器
    if (timer) {
      // 每次执行让定时器清空
      clearTimeout(timer);
      timer = null;
    }
    // 每次执行此函数的时候 让它延迟执行 wait
    timer = setTimeout(function () {
      // 改变this指向
      // 这里this指向是 谁调用return出来的函数 this就指向谁
      // args 传递参数
      fn.apply(context, args)
    }, wait)
  }
};
//节流函数
export const Throttle = (fn, time) => {
  // 定义一个保留时间的变量 初始值为0
  let start = 0;
  return function (e) {
    // 获取到当前的时间 单位是毫秒
    let terminal = new Date().getTime();
    /*
    * 第一次初始值为0 会执行一次 并且保留执行时的时间值
    * 当此函数第二次执行的时候 由于时间不是一个定值 这时重新产生一个当前时间值
    * 当前执行的时间值减去上次执行的时间值 如果不大于等于自定义的时间【time】
    * 则不会执行此函数 直到动态变化的时间减去上次执行的时间大于自定义的时间值【time】时才会再次触发此函数的执行
    * */
    if (terminal - start >= time) {
      // 向调用方传递参数
      fn.call(this, e);
      // 每次执行时重新给start赋值为当前点击的时间
      start = terminal
    }
  }
};
// 随机数
export const Maths = () => {
  return Math.floor(Math.random() * 277)
};
